ABC104 C - All Green
提出
code: python
d, g = map(int, input().split())
res = 0
ans = 0
flag = True
# 点数の高いものから取っていく
for i in reversed(pd):
if (flag):
print(i)
解答
code: python
import itertools
D, G = map(int, input().split())
p = []
c = []
for i in range(D):
p.append(P)
c.append(C)
all_pattern = itertools.product(0, 1, repeat=D) ans = 10**10
for pattern in all_pattern:
score = 0 # 獲得した点数
cnt = 0 # 解いた問題の数
problems = []
for i in range(D):
if patterni == 1: # パターンが1ならその点数の問題を全問解く score += (i+1) * 100 * pi + ci # 解いた問題の点数+ボーナス cnt += pi # 全問を解いた数にインクリメント else: # パターンが0なら,点数が足りない時に解く用に必要なので,問題を貯める
# パターン0の問題を解くとしても,全部解いてはダメで,最大でもp-1個の問題しか使えない
problems.append((i+1))
if score >= G: # 獲得した点数が目標点Gより高かったら,その時点で解いた問題数を報告
ans = min(ans, cnt)
continue # もう他の問題を解く必要がないので,次のパターンに移る
# Gに点数が足りない場合,全部解かないとした(パターンが0)各問題から,全問解かないように(p-1個から選んで),最小の問題数を探す
# リストproblemsに入ってる得点から,好きに選んで残りの点数を超えるようにする = 貪欲に高い点数から選んでいく
rest = (G - score)//100 # 残り必要な点数 / 100
m = len(problems) # 使用可能な問題の得点のリストの個数
problems = sorted(problems, reverse=True)
cnt2 = 0
for j in range(m):
cnt2 += 1
if rest <= 0:
break
# 全問解いた時の問題数cntと残りで解いた問題の数の和が,このパターンにおける最小問題数
if rest <= 0: # ちゃんと全部解き終わっていたらOK
ans = min(ans, cnt + cnt2)
print(ans)
テーマ
提出
code: python
d, g = map(int, input().split())
print(pc)
解答
code: python
d, g = map(int, input().split())
ans = 10001
for bit in range(2 ** d):
score = 0
res = 0
for i in range(d):
# 全完対象
if ((bit >> i) & 1):
score += 100 * (i+1) * p + c
res += p
if score >= g:
ans = min(ans, res)
else:
for i in range(d-1, -1, -1):
if ((bit >> i) & 1):
continue # すでに全完していたらスキップ
for j in range(p):
if score >= g:
break
score += 100*(i+1) # 1つ追加する
res += 1
if score >= g:
ans = min(ans, res)
break
print(ans)
メモ